package com.learning.spring.ioc.bean.lifecycle.processor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * ClassName: LifeCycleBeanPostProcessor
 * Description: 容器级别接口 BeanPostProcessor（始化 Initialization 前后）
 * <p>
 * 1. BeanPostProcessor是 Bean后置处理器接口，
 * 2. 注重处理时点是在 Bean 的初始化（Initialization）前后，显式的初始化方法为 init-method 指定的方法。
 * 3. 初始化的过程是一个赋值的过程，即调用 Bean 的 setter方法设置 Bean 的属性等
 * <p>
 * Date: 2018/8/3 13:24 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
public class LifeCycleBeanPostProcessor implements BeanPostProcessor {

    /**
     * 初始化 Initialization 前
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("调用 BeanPostProcessor.postProcessBeforeInitialization 方法（初始化 Initialization 前）");
        return bean;
    }

    /**
     * 初始化 Initialization 后
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("调用 BeanPostProcessor.postProcessAfterInitialization 方法 （初始化 Initialization 后）");
        return bean;
    }
}
